package cn.sunxyz.core.bean.plugin;

import java.lang.annotation.Annotation;
import java.util.List;
import java.util.Map;
import java.util.function.Function;

/**
 * Created by yangrd on 2017/5/22.
 */
public interface Plugin {
    /**
     * 用于初始化插件 只在插件创建后使用一次
     */
    void before(Function<Class<? extends Annotation>, List<Class<?>>> listClassByAnnotation);

    /**
     * 用于创建组件对象会被调用多次
     */
    Object createTarget(Class<?> targetClazz, Object target);

    /**
     * 用于获取插件维护的对象 只在全部对象初始后化使用一次
     */
    void after(Function<Class<? extends Annotation>, Map<Class<?>, Object>> mapByAnnotation);
}
